package org.product.dao.impl;

import org.product.dao.MessageDao;
import org.product.entity.Message;
import org.product.entity.Product;
import org.product.util.DB4MySQLUtil;
import org.product.vo.MessageReplayVo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author zqx
 * @date 2021-01-04
 */
public class MessageDaoImpl implements MessageDao {
    @Override
    public List<MessageReplayVo> queryMessageAndReplay() {
        List<MessageReplayVo> list = new ArrayList<>() ;

        //第一：定义操作数据库的SQL语句
        String sql = "SELECT M.ID,M.TITLE,M.CONTENT,M.AUTHOR_ID,M.MESSAGE_TIME,R.CONTENT,R.MESSAGE_TIME,R.AUTHOR_ID FROM MESSAGE AS M,REPLAY AS R WHERE M.ID=R.MESSAGE_ID" ;

        //第二：获取连接对象
        Connection conn = DB4MySQLUtil.getConnection();

        //第三：使用连接对象，获取语句对象(PreparedStatement)，并预编译SQL语句
        PreparedStatement pstmt = null ;
        ResultSet rst = null ;
        try {
            pstmt= conn.prepareStatement(sql);

            //第四：设置数据
            //语法：语句对象.setXxx(问号占位符索引,数据) ;


            //第五：执行SQL语句，并接收返回结果
            //语句对象.executeUpdate() -> 增,删,改	   ->  返回的是受影响的记录数
            //语句对象.executeQuery()  -> 查			-> 	返回的是结果集(ResultSet)
            rst = pstmt.executeQuery() ;
            //第六：对结果进行处理
            //遍历结构集各行各列的数据，封装到相关的实体对象或集合
            //判断有没有数据:结果集对象.next()
            //获取结果集的数据:
            //结果集对象.getXxx(查询数据的索引) ;
            //结果集对象.getXxx(查询数据的字段名称) ;

            while(rst.next()) {
                // 1.读取数据
                int messageId = Integer.parseInt(rst.getString(1)) ;
                String messageTitle = rst.getString(2) ;
                String messageContent = rst.getString(3) ;
                Date messageTime = rst.getTimestamp(4) ;
                String messageAuthor = rst.getString(5) ;
                String replayContent = rst.getString(6) ;
                String replayAuthor = rst.getString(7) ;
                Date replayTime = rst.getTimestamp(8) ;

                // 2.创建VO对象
                MessageReplayVo mrv = new MessageReplayVo() ;

                //3.封装数据
                mrv.setMessageId(messageId);
                mrv.setMessageContent(messageContent);
                mrv.setReplayContent(replayContent);
                // ....

                //4.把实体对象添加到List集合中
                list.add(mrv) ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 第七：关闭对象
            DB4MySQLUtil.close(conn,pstmt,rst);
        }
        // 返回集合对象
        return list;
    }

    @Override
    public List<Message> queryAllMessage() {

        List<Message> list = new ArrayList<>() ;

        //第一：定义操作数据库的SQL语句
        String sql = "SELECT * FROM MESSAGE" ;

        //第二：获取连接对象
        Connection conn = DB4MySQLUtil.getConnection();

        //第三：使用连接对象，获取语句对象(PreparedStatement)，并预编译SQL语句
        PreparedStatement pstmt = null ;
        ResultSet rst = null ;
        try {
            pstmt= conn.prepareStatement(sql);

            //第四：设置数据
            //语法：语句对象.setXxx(问号占位符索引,数据) ;


            //第五：执行SQL语句，并接收返回结果
            //语句对象.executeUpdate() -> 增,删,改	   ->  返回的是受影响的记录数
            //语句对象.executeQuery()  -> 查			-> 	返回的是结果集(ResultSet)
            rst = pstmt.executeQuery() ;
            //第六：对结果进行处理
            //遍历结构集各行各列的数据，封装到相关的实体对象或集合
            //判断有没有数据:结果集对象.next()
            //获取结果集的数据:
            //结果集对象.getXxx(查询数据的索引) ;
            //结果集对象.getXxx(查询数据的字段名称) ;

            while(rst.next()) {
                // 1.读取数据
                int messageId = Integer.parseInt(rst.getString(1)) ;
                String messageTitle = rst.getString(2) ;
                String messageContent = rst.getString(3) ;
                Date messageTime = rst.getTimestamp(4) ;
                String messageAuthor = rst.getString(5) ;

                // 2.创建VO对象
                Message m = new Message() ;

                //3.封装数据
                m.setId(messageId);
                m.setContent(messageContent);
                // ....

                //4.把实体对象添加到List集合中
                list.add(m) ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 第七：关闭对象
            DB4MySQLUtil.close(conn,pstmt,rst);
        }
        // 返回集合对象
        return list;
    }
}
